package com.pay.weixin;

import lombok.Getter;
import lombok.Setter;

/**
 * Created by ThreeManTeam on 2016/11/14.
 */
@Getter
@Setter
public class WxPayConfig {

    //以下是几个API的路径：
    //1）被扫支付API
    //public static String PAY_API = "https://api.mch.weixin.qq.com/pay/micropay";
    public static final String PAY_API = "https://api.mch.weixin.qq.com/pay/unifiedorder";

    //2）被扫支付查询API
    public static final String PAY_QUERY_API = "https://api.mch.weixin.qq.com/pay/orderquery";

    //3）退款API
    public static final String REFUND_API = "https://api.mch.weixin.qq.com/secapi/pay/refund";

    //4）退款查询API
    public static final String REFUND_QUERY_API = "https://api.mch.weixin.qq.com/pay/refundquery";

    //5）撤销API
    public static final String REVERSE_API = "https://api.mch.weixin.qq.com/secapi/pay/reverse";

    //6）下载对账单API
    public static final String DOWNLOAD_BILL_API = "https://api.mch.weixin.qq.com/pay/downloadbill";

    //7) 统计上报API
    public static final String REPORT_API = "https://api.mch.weixin.qq.com/payitil/report";

    //8) 分账API
    public static final String SPLIT_ACCOUNT_API = " https://api.mch.weixin.qq.com/secapi/pay/profitsharing";

    private static String HttpsRequestClassName = "com.entplus.wxpay.util.HttpsRequest";

    //这个就是自己要保管好的私有Key了（切记只能放在自己的后台代码里，不能放在任何可能被看到源代码的客户端程序中）
    //每次自己Post数据给API的时候都要用这个key来对所有字段进行签名，生成的签名会放在Sign这个字段，API收到Post数据的时候也会用同样的签名算法对Post过来的数据进行签名和验证
    //收到API的返回的时候也要用这个key来对返回的数据算下签名，跟API的Sign数据进行比较，如果值不一致，有可能数据被第三方给篡改
    //私有Key
    private String key;

    //微信分配的公众号ID（开通公众号之后可以获取到）
    private String appId;

    //微信支付分配的商户号ID（开通公众号的微信支付功能之后可以获取到）
    private String mchId;

    //机器IP
    private String ip;

    //回调地址
    private String notifyUrlAsync;

    //支付超时时长，单位：秒
    private int payTimeout;

    //交易类型
    private String tradeType = "NATIVE";

    /********************本地使用的参数********************************/

    //订单支付状态本地查询Url。
    private String localQueryUrl;

    //本地回调地址。
    private String notifyUrl;

    private static WxPayConfig instance;

    private WxPayConfig() {
    }

    public synchronized static WxPayConfig getInstance() {
        if (instance == null) {
            instance = new WxPayConfig();
        }
        return instance;
    }

    public synchronized static WxPayConfig getNewInstance() {
        return new WxPayConfig();
    }

}